/**
 * 面试中的编程题 写一个函数
 * 传统的面向对象语言 实例
 * dog Object实例出来 原型链
 * dog.__proto__  == b.prototype b是a的原型对象
 * dog.__proto__.__proto__ -> null  b是a原型链上的对象
 * instanceof 在传统语言中判断的是 a是b的实例
 * js 中 instanceof 运算符用于判断->
 * 构造函数的prototype属性是否在对象的原型链中的任何位置
 * @func instanceof 实现
 * @params a 实例 b 对象
 * @return boolean
 */
function Cat(){
}
function Dog(){
}
Dog.prototype.sayHi = function(){
}
function myInstanceof(a,b){
    // 原型 
    let proto = Object.getPrototypeOf(a); //a.__proto__
    // console.log(proto);
    let prototype = b.prototype;
    // if(proto == b.prototype) return true;
    // return false;
    while(true){
        if(!proto) return false; //null
        if(proto == prototype)return true; //while退出
        proto = Object.getPrototypeOf(proto); //向上找
        // console.log(proto);
    }
}
const dog = new Dog();
myInstanceof(dog,Dog);
// myInstanceof(dog,Cat);
// myInstanceof(dog,Object);